#List(列表)

l = ['y'] * 3
print(l)
#['y', 'y', 'y']

#append(添加)：将元素插入到list的末尾
jyc_list = [1, 2, 3]
jyc_list.append(4)
print(jyc_list)
#[1, 2, 3, 4]

#insert指定位置插入元素
jyc_list.insert(2, 5)
print(jyc_list)
#[1, 2, 5, 3, 4]

#检索(Retrieve)

#*切片是忽略最后一个元素
print(jyc_list[0:4])
#[1, 2, 5, 3]头闭尾开

print(jyc_list[0:])
#[1, 2, 5, 3, 4]从头到尾

print(jyc_list[:4])
#[1, 2, 5, 3]从头不尾

print(jyc_list[-1])
#4最后一位

print(jyc_list[0:4:2])
#[1, 5]从头到尾间隔为2

print('返回目标索引\n', jyc_list.index(5))
#2

jyc_list.insert(jyc_list.index(5), 7)
#print(jyc_list.insert(jyc_list.index(5), 7))--直接打印返回None,insert插入原始列表
print(jyc_list)
#[1, 2, 7, 5, 3, 4]
#在返回目标索引处插入7的值

#更新(Update)

jyc_list[2] = 9
print(jyc_list)
#[1, 2, 9, 5, 3, 4]
#直接更新指定索引的值

jyc_list[0:2] = [6, 7, 8]
print(jyc_list)
#[6, 7, 8, 9, 5, 3, 4]
#直接更新字符串，不包含最后一位索引

#删除(Delete)

#pop
print('默认删除最后一位元素\n', jyc_list.pop())
#4返回删除值

#remove
jyc_list.remove(5)
#返回值位None，只删除找到的第一个目标元素
print(jyc_list)
#[6, 7, 8, 9, 3]

#count统计
#计算目标元素在当前list中的个数
print(jyc_list.count(7))
#1

#reverse非倒序排序,返回None(仅反转列表，不针对数值大小排序)（倒序需要结合sort，eg: b.sort(reverse=True)）

jyc_list.reverse()
print(jyc_list)
#[3, 9, 8, 7, 6]

print('reversed返回迭代器，通过list转换成列表', list(reversed(jyc_list)))
#[6, 7, 8, 9, 3]

#sort在当前列表上做增序排列, 返回None
#增序排列
jyc_list.sort()
print(jyc_list)
#[3, 6, 7, 8, 9]

#倒序排列
#=True则倒序排列，=False则增序排列
jyc_list.sort(reverse=True)
print(jyc_list)
#[9, 8, 7, 6, 3]

#your_list.sort(key=func) # func是函数, 也就是自定义排序

#sorted(排序)
print(sorted(jyc_list))
#[3, 6, 7, 8, 9]


#Tuple只可检索
#tuple索引仍然用中括号

jyc_tuple = (1, 2, 3, 4, 5)
print(jyc_tuple[1])
#2

print(jyc_tuple[1:3])
#(2, 3)

print(jyc_tuple.index(4))
#3


#Dict(字典)

#增加(Create)
#键对值赋值/索引也用中括号
jyc_dict = {1: 'j', 2: 'y', 3: 'c'}
jyc_dict[4] = 'learn'
print(jyc_dict)
#{1: 'j', 2: 'y', 3: 'c', 4: 'learn'}

#update
jyc_dict[4] = 'like'
jyc_dict_2 = {5: 'learn', 6: 'python'}
jyc_dict_3 = jyc_dict.update(jyc_dict_2)
#jyc_dict_3返回值为None
print(jyc_dict)
#{1: 'j', 2: 'y', 3: 'c', 4: 'like', 5: 'learn', 6: 'python'} -- 更新至原列表

#setdefault如果有值, 就返回原始值, 如果没有值, 就设置默认值
print(jyc_dict.setdefault(6, 'world'))
jyc_dict.setdefault(7, 'hello，world')
print(jyc_dict)
#{1: 'j', 2: 'y', 3: 'c', 4: 'like', 5: 'learn', 6: 'python', 7: 'hello，world'}

#检索(Retrieve)

#get如果有值, 则返回该值; 如果没有值, 返回默认值
print(jyc_dict.get(6, 'c'))
print(jyc_dict.get(8, 'c'))
print(jyc_dict)
#python
#c
#{1: 'j', 2: 'y', 3: 'c', 4: 'like', 5: 'learn', 6: 'python', 7: 'hello，world'}

#keys()
print(jyc_dict.keys())
#dict_keys([1, 2, 3, 4, 5, 6, 7]) -- 以列表形式返回所有key

#values()
print(jyc_dict.values())
#dict_values(['j', 'y', 'c', 'like', 'learn', 'python', 'hello，world']) -- 列表形式返回所有值

#items()元组形式返回所有键对值
print(jyc_dict.items())
#dict_items([(1, 'j'), (2, 'y'), (3, 'c'), (4, 'like'), (5, 'learn'), (6, 'python'), (7, 'hello，world')])

#更新(Update)
#键对值赋值
jyc_dict[7] = 'Hi,world'
#update
jyc_dict_4 = {8: 'go', 9: 'gogogo'}
jyc_dict_5 = jyc_dict.update(jyc_dict_4)
print(jyc_dict)
#{1: 'j', 2: 'y', 3: 'c', 4: 'like', 5: 'learn', 6: 'python', 7: 'Hi,world', 8: 'go', 9: 'gogogo'}

#删除(Delete)
jyc_dict.pop(8)
print(jyc_dict)
#删除指定key

#popitem()随机删除元素  *尽量不要用

#clear()
jyc_dict.clear()
print(jyc_dict)
#{} --清空字典


#Set(集合)

#增加(Create)
jyc_set = {'j', 'y', 'c', 'like', 'learn', 'python', 'hello，world'}
jyc_set.add('GGG')
print(jyc_set)
#{'python', 'hello，world', 'j', 'y', 'learn', 'c', 'GGG', 'like'}

#检索(Retrieve)
#in -- 判断当前元素在不在set中
print('j' in jyc_set)
#True
print('k' in jyc_set)
#False

#更新(Update)
#x.update(y) # 将y的元素合并到x中, 返回None
jyc_set_2 = {'gogogo'}
jyc_set.update(jyc_set_2)
print(jyc_set)
#{'j', 'y', 'c', 'hello，world', 'learn', 'python', 'GGG', 'like', 'gogogo'}

#union
#x.union(y) # 返回合并集, 不改变x, y
jyc_set_3 = {'go'}
x = jyc_set.union(jyc_set_3)
print(x)
print(jyc_set)
#{'learn', 'GGG', 'python', 'gogogo', 'go', 'j', 'y', 'hello，world', 'c', 'like'}
#{'learn', 'GGG', 'python', 'gogogo', 'j', 'y', 'hello，world', 'c', 'like'}

#删除(Delete)
#your_set.remove(value) # 删除元素, 没有该元素会报错
#your_set.discard(value) # 删除元素, 没有该元素不会报错

#pop -- 随机删除一个元素
print(jyc_set.pop())
print(jyc_set)
#python
#{'hello，world', 'like', 'c', 'GGG', 'gogogo', 'learn', 'y', 'j'}


#自己做一张4X4的表格, 表示当前接口是否可用.

#TYPE      |    C(create)   |  R(Retrieve)  | U (update)  |   D (delete)
#List(列表) |     √          |      √       |     √        |     √
#Tuple(元组)|     -          |      √       |     -        |     -
#Dict(字典) |     √          |      √       |     √        |     √
#Set(集合)  |     √          |      √       |     √        |     √